/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ps.util;

/**
 *
 * @author Admin
 */
public class vl64 {
    
    
/* 
 * vl64 encoding for habbo servers in Java 
 *  
 * @author Who ever wrote the C# version, Lord Jordan Porting 
 */ 
    public static String Encode(int i) 
    { 
        byte[] wf = new byte[6]; 
        int pos = 0; 
        int startPos = pos; 
        int bytes = 1; 
        int negativeMask = i >= 0 ? 0 : 4; 
        i = Math.abs(i); 
        wf[pos++] = (byte)(64 + (i & 3)); 
        for (i >>= 2; i != 0; i >>= 6) 
        { 
            bytes++; 
            wf[pos++] = (byte)(64 + (i & 0x3f)); 
        } 

        wf[startPos] = (byte)(wf[startPos] | bytes << 3 | negativeMask); 
        String tmp = new String(wf); //encoder.GetString(wf); 
        return tmp.replace("\0", ""); 
    } 
    public static int Decode(String data) 
    { 
        char[] chars; 
        chars = data.toCharArray(); 
        return Decode(chars); 
    } 
    public static int Decode(char[] raw) 
    { 
        try { 
        int pos = 0; 
        int v = 0; 
        boolean negative = (raw[pos] & 4) == 4; 
        int totalBytes = raw[pos] >> 3 & 7; 
        v = raw[pos] & 3; 
        pos++; 
        int shiftAmount = 2; 
        for (int b = 1; b < totalBytes; b++) 
        { 
            v |= (raw[pos] & 0x3f) << shiftAmount; 
            shiftAmount = 2 + 6 * b; 
            pos++; 
        } 

        if (negative == true) 
            v *= -1; 
        return v; 
        } 
        catch (Exception e) { 
            return 0; 
        }         
    }     
}  

